import pandas as pd
import datetime as datetime
import warnings
import openpyxl
from openpyxl import load_workbook


def readexcel():
    在职人员名单文件 = '../文件/下载在职人员报表2024-02-26.xlsx'
    充值名单规则文件 = '../文件/餐补充值账号及充值名单规则.xlsx'
    inJobDate = pd.read_excel(在职人员名单文件, dtype='str')
    print(inJobDate)
    warnings.filterwarnings('ignore')
    ruleDate = pd.read_excel(充值名单规则文件, sheet_name='过滤条件', header=1, dtype='str')
    print(ruleDate)
    useBU = ruleDate['集团充值负责BU']
    post = ruleDate['岗位不充值']
    # #过滤条件的BU
    useBUList = useBU.tolist()
    print(useBUList)
    # Log.Info(self,f'本次过滤的BU有:{useBUList}')
    # #岗位不充值的过滤条件
    postList = post.tolist()
    print(postList)
    # Log.Info(self,f'本次过滤的不充值的岗位有:{postList}')
    number = ruleDate['名单不充值工号']
    numberLists = number.tolist()
    numberList = [str(item).strip() for item in numberLists]
    # Log.Info(self,f'本次过滤的不充值的岗位有:{numberList}')

    # numberNeed = ruleDate['名单充值工号']
    # numberNeedList = numberNeed.tolist()

    # Log.Info(self,f'本次过滤的不充值的岗位有:{numberList}')

    numberNeed = ruleDate['名单充值工号']
    # numberNeedList = numberNeed.tolist()
    numberNeedLists = numberNeed.tolist()
    # 使用列表推导式和strip方法去除每个字符串的前后空格
    numberNeedList = [str(item).strip() for item in numberNeedLists]
    print(f'需要充值的人员{numberNeedList}')
    # Log.Info(self,f'本次过滤的不充值的岗位有:{numberNeedList}')

    # 在职名单数据筛选（新入职的：入职时间为当天，属于负责BU的，不包含过滤岗位的，工作地点属于’深圳-石岩‘的，是否外餐为’N‘的）
    time = datetime.datetime.now()
    nowDay = time.strftime('%Y-%m-%d')

    print(nowDay)
    # 过滤时间为当天的
    nowDaydate = inJobDate[(inJobDate['入职日期'].isin([nowDay]))]
    # Log.Info(self, f'本次过滤的入职日期为:{nowDay}的有{nowDaydate.shape[0]}条')
    if (nowDaydate.shape[0] == 0):
        Log.Info(self, '当前在职人员中没有今天新入职的员工')
        return itemDateList
    # 过滤其他条件
    resuleDate = nowDaydate[(nowDaydate['所属公司'].isin(useBUList)) & (~nowDaydate['岗位'].isin(postList))
                            & (nowDaydate['工作地点'].isin(['深圳-石岩'])) & (nowDaydate['是否外餐'].isin(['N']))]



    # 再将人员不充值的过滤
    tableDate = resuleDate[~resuleDate['工号'].isin(numberList)]
    # Log.Info(self, f'其中所属公司/岗位/工作地点/工号等符合条件的数据有{tableDate.shape[0]}条')

    # 再将人员需要充值的整合进去
    if (len(numberNeedList) > 0):
        numberNeedDate = inJobDate[inJobDate['工号'].isin(numberNeedList)]
        print("**********")
        print(numberNeedDate)
        tableDate = pd.concat([numberNeedDate, tableDate], axis=0)
    print(resuleDate)


    # 将过滤结果进行整理，并保存到excel中

    tableHeard = ['工号', '姓名', '职层', '入职日期', '所属公司', '中心', '部', '课室', '所属组织单元', '岗位',
                  '计薪类别', '人员类别']
    insertDate = tableDate[tableHeard]
    insertDate.fillna('')
    print(insertDate)
    insertDateList = insertDate.values.tolist()
    print(insertDateList)
    # Log.Info(self, f'转换成List后的数据有:{insertDateList}')
    filterate = ['经理层', '总经理层', '总监层', '副总裁层', '总裁层']
    itemDateList = []
    monthTime = time.strftime('%Y-%m')

    for itemStr in insertDateList:
        itemList = []
        print(itemStr)
        itemList.append(monthTime)  # 期数
        itemList.append(itemStr[0])  # 工号
        itemList.append(itemStr[1])  # 姓名
        if (str(itemStr[2]) in filterate):  # 判断职层
            itemList.append(itemStr[1])  # 经理层以上
            itemList.append('')
        else:
            itemList.append('')  # 经理层以下
            itemList.append(itemStr[1])
        itemList.append(itemStr[3])  # 入职日期
        itemList.append('')  # 离职日期
        itemList.append(itemStr[4])  # 一级部门
        itemList.append(itemStr[5])  # 二级部门
        itemList.append(itemStr[6])  # 三级级部门
        itemList.append(itemStr[7])  # 四级部门
        itemList.append(itemStr[8])  # 所属部门
        itemList.append(itemStr[9])  # 岗位
        itemList.append(itemStr[10])  # 计薪类别
        itemList.append(itemStr[11])  # 员工类别
        itemDateList.append(itemList)
    print(itemDateList)
    # Log.Info(self, f'整理成插入表格的规范数据有:{itemDateList}')

# readexcel()

def insertDate():
    新员工明细表路径 = '../文件/新员工明细表1708656331.csv'
    模板文件路径 = '../文件/集团充值数据模板.xlsx'
    warnings.filterwarnings('ignore')

    过滤在职后列表 = [
        ['2024-02', '1251908', '陈莹', '', '陈莹', '2024-02-26', '', '裕同科技', '董秘办', '证劵事务组', 'nan',
         '证劵事务组', '实习生', '月薪', '实习生'],
        ['2024-02', '1250875', '胡先进', '', '陈莹', '2024-02-26', '', '裕同科技', '董秘办', '证劵事务组', 'nan',
         '证劵事务组', '实习生', '月薪', '实习生'],
        ['2024-02', '1251393', '王逸', '', '陈莹', '2024-02-26', '', '裕同科技', '董秘办', '证劵事务组', 'nan',
         '证劵事务组', '实习生', '月薪', '实习生']]
    dates = pd.read_csv(新员工明细表路径, header=1, dtype='str')
    datesToList = dates.values.tolist()
    datesList = dates['工号'].tolist()
    # datesToList=[]
    # datesList=[]
    print(datesList)
    succeedNameList = []
    notSucceedNameList = []
    for item in 过滤在职后列表:
        if item[1] in datesList:
            print('存在')
            succeedNameList.append(item)
        else:
            print('不存在')
            notSucceedNameList.append(item)
    print(succeedNameList)
    print(notSucceedNameList)
    wb = openpyxl.load_workbook(模板文件路径)
    sheet0 = wb['充值名单']
    sheet1 = wb['充值成功名单']
    sheet2 = wb['不成功名单']
    sheet3 = wb['充值金额']
    start_row0 = 2
    start_row1 = 2
    start_row2 = 2
    start_row3 = 2
    # 写入'充值成功名单'sheet页数据
    for item in 过滤在职后列表:
        for col in range(1, len(item) + 1):
            sheet0.cell(row=start_row0, column=col).value = item[col - 1]
        start_row0 += 1
    # 写入'充值成功名单'sheet页数据
    for item in succeedNameList:
        for col in range(1, len(item) + 1):
            sheet1.cell(row=start_row1, column=col).value = item[col - 1]
        start_row1 += 1
    # 写入'不成功名单'sheet页数据
    for item in notSucceedNameList:
        for col in range(1, len(item) + 1):
            sheet2.cell(row=start_row2, column=col).value = item[col - 1]
        start_row2 += 1
    # 写入'充值金额'sheet页数据
    for item in datesToList:
        for col in range(1, len(item) + 1):
            sheet3.cell(row=start_row3, column=col).value = item[col - 1]
        start_row3 += 1
    wb.save(模板文件路径)


# readexcel()
# insertDate()

import pandas as pd
import datetime as datetime
import warnings
import openpyxl
from openpyxl import load_workbook

#老员工数据过滤
def oldReadexcel():
    # Log.Info(self, f'{在职人员名单文件},{充值名单规则文件}')
    # 在职人员名单文件 = '../文件/下载在职人员报表2024-08-06.xlsx'
    # 充值名单规则文件 = '../文件/餐补充值账号及充值名单规则.xlsx'
    warnings.filterwarnings('ignore')
    itemDateList = []
    inJobDate = pd.read_excel(在职人员名单文件, dtype='str')

    print(inJobDate)

    ruleDate = pd.read_excel(充值名单规则文件, sheet_name='过滤条件', header=1, dtype='str')
    print(ruleDate)
    useBU = ruleDate['集团充值负责BU']
    post = ruleDate['岗位不充值']
    # #过滤条件的BU
    useBUList = useBU.values.tolist()
    print(useBUList)
    # Log.Info(self, f'本次过滤的BU有:{useBUList}')
    # #岗位不充值的过滤条件
    postList = post.values.tolist()
    print(postList)
    # Log.Info(self, f'本次过滤的不充值的岗位有:{postList}')
    number = ruleDate['名单不充值工号']
    numberLists = number.values.tolist()
    print(numberLists)
    # 使用列表推导式和strip方法去除每个字符串的前后空格
    numberList = [str(item).strip() for item in numberLists]
    print(numberList)
    # Log.Info(self, f'本次过滤的不充值人员位有:{numberList}')

    numberNeed = ruleDate['名单充值工号']
    numberNeedLists = numberNeed.tolist()
    # 使用列表推导式和strip方法去除每个字符串的前后空格
    numberNeedList = [str(item).strip() for item in numberNeedLists]
    print(f'需要充值的人员{numberNeedList}')
    # Log.Info(self,f'本次过滤的不充值的岗位有:{numberNeedList}')
    print(numberNeedList)
    # 在职名单数据筛选（老员工的：入职时间为上个月及之前的，属于负责BU的，不包含过滤岗位的，工作地点属于’深圳-石岩‘的，是否外餐为’N‘的）
    time = datetime.datetime.now()
    monthTime = time.strftime('%Y-%m')
    print(monthTime)


    # 过滤时间为当天的
    nowDaydate = inJobDate[(inJobDate['入职日期'] < monthTime)]
    # Log.Info(self, f'本次过滤的入职日期为:{nowDay}的有{nowDaydate.shape[0]}条')
    if (nowDaydate.shape[0] == 0):
        # Log.Info(self, '当前在职人员中没有今天新入职的员工')
        return itemDateList
    # 过滤其他条件
    resuleDate = nowDaydate[(nowDaydate['所属公司'].isin(useBUList)) & (~nowDaydate['岗位'].isin(postList))
                            & (nowDaydate['工作地点'].isin(['深圳-石岩'])) & (nowDaydate['是否外餐'].isin(['N']))]
    print(resuleDate)

    # 再将人员不充值的过滤
    tableDate = resuleDate[~resuleDate['工号'].isin(numberList)]
    # Log.Info(self, f'其中所属公司/岗位/工作地点/工号等符合条件的数据有{tableDate.shape[0]}条')
    # 将过滤结果进行整理，并保存到excel中

    # 再将人员需要充值的整合进去
    if (len(numberNeedList) > 0):
        numberNeedDate = inJobDate[inJobDate['工号'].isin(numberNeedList)]
        print("**********")
        print(numberNeedDate)
        tableDate = pd.concat([numberNeedDate, tableDate], axis=0)

    tableHeard = ['工号', '姓名', '职层', '入职日期', '所属公司', '中心', '部', '课室', '所属组织单元', '岗位',
                  '计薪类别', '人员类别']
    insertDate = tableDate[tableHeard]
    insertDate.fillna('')

    print(insertDate)
    insertDateList = insertDate.values.tolist()
    # print(insertDateList)
    # Log.Info(self, f'转换成List后的数据有:{insertDateList}')
    filterate = ['经理层', '总经理层', '总监层', '副总裁层', '总裁层']

    for itemStr in insertDateList:
        itemList = []
        # print(itemStr)
        itemList.append(monthTime)  # 期数
        itemList.append(itemStr[0])  # 工号
        itemList.append(itemStr[1])  # 姓名
        if (str(itemStr[2]) in filterate):  # 判断职层
            itemList.append(itemStr[1])  # 经理层以上
            itemList.append('')
        else:
            itemList.append('')  # 经理层以下
            itemList.append(itemStr[1])
        itemList.append(itemStr[3])  # 入职日期
        itemList.append('')  # 离职日期
        itemList.append(itemStr[4])  # 一级部门
        itemList.append(itemStr[5])  # 二级部门
        itemList.append(itemStr[6])  # 三级级部门
        itemList.append(itemStr[7])  # 四级部门
        itemList.append(itemStr[8])  # 所属部门
        itemList.append(itemStr[9])  # 岗位
        itemList.append(itemStr[10])  # 计薪类别
        itemList.append(itemStr[11])  # 员工类别
        itemDateList.append(itemList)
    # print(itemDateList)
    # Log.Info(self, f'整理成插入表格的规范数据有:{itemDateList}')
    return itemDateList

# 在职人员名单文件 = '../文件/下载在职人员报表2024-02-26.xlsx'
# 充值名单规则文件 = '../文件/餐补充值账号及充值名单规则.xlsx'
oldReadexcel()